/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.components;

// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.UXScalable;
import jp.ize.ux.UXResource;
import jp.ize.ux.UXRange;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
import jp.ize.ux.UXFocusManager;
import jp.ize.ux.components.UXButton;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.acts.Act;
import jp.ize.ux.components.UXComponent;
// }}}
// {{{ class UXSliderResource extends UXComponentResource
/**
 * UXSliderResource クラス<br>
 * UXSliderコンポーネントに利用されるリソース群です。
 */
class UXSliderResource extends UXComponentResource
{
	// {{{ public var trac( default, default ) : ;
	/**
	 * スライダートラック(背景)となるコンポーネントです。
	 */
	public var trac( default, default ) : UXScalable;
	// }}}
	// {{{ public var thumbResource( default, default ) : UXButtonResource;
	/**
	 * スライダーバーのサムのリソースです。
	 */
	public var thumb( default, default ) : UXButtonResource;
	// }}}
}
// }}}
// {{{ enum UXSliderActEvent
enum UXSliderActEvent
{
}
// }}}
// {{{ class UXSliderAct extends ActSubject<UXSliderActEvent>
/**
 * UXSliderAct クラス<br>
 * UXSliderのデフォルトアクションです。
 */
class UXSliderAct extends ActSubject<UXSliderActEvent>
{
	// {{{ public function new()
	/**
	 * コンストラクタです。<br>
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function uplight( s : UXSliderState ) : Void
	/**
	 * ボタンをハイライトした時のデフォルトアクションです。
	 */
	public function uplight( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function downlight( s : UXSliderState ) : Void
	/**
	 * ボタンのハイライトを解除した時のデフォルトアクションです。
	 */
	public function downlight( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function focus( s : UXSliderState ) : Void
	/**
	 * ボタンがフォーカスされた時のデフォルトアクションです。
	 */
	public function focus( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function unfocus( s : UXSliderState ) : Void
	/**
	 * ボタンのフォーカスが解除された時のデフォルトアクションです。
	 */
	public function unfocus( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function disable( s : UXSliderState ) : Void
	/**
	 * 無効にした時のデフォルトアクションです。
	 */
	public function disable( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function enable( s : UXSliderState ) : Void
	/**
	 * 有効にした時のデフォルトアクションです。
	 */
	public function enable( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function show( s : UXSliderState ) : Void
	/**
	 * 表示状態になった時のデフォルトアクションです。
	 */
	public function show( s : UXSliderState ) : Void
	{
	}
	// }}}
	// {{{ public function hide( s : UXSliderState ) : Void
	/**
	 * 非表示状態になった時のデフォルトアクションです。
	 */
	public function hide( s : UXSliderState ) : Void
	{
	}
	// }}}
}
// }}}
// {{{ class UXSliderCoState
class UXSliderCoState
{
	// {{{ public var focused(default, default) : Bool
	/**
	 * このボタンにフォーカスが当たっているかどうかを取得、または設定します。
	 */
	public var focused(default, default) : Bool;
	// }}}
	// {{{ public var highlighted(default, default) : Bool
	/**
	 * このボタンがハイライトされているかどうかを取得、または設定します。
	 */
	public var highlighted(default, default) : Bool;
	// }}}
}
// }}}
// {{{ enum UXSliderExclusiveState
/**
 * UXSliderの各種状況を表現します。
 */
enum UXSliderExclusiveState
{
	/** 初期化状態にある事を意味します。*/
	INIT;
	/** 無効になっている事を意味します。*/
	DISABLE;
	/** 有効になっている事を意味します。パラメーターでは、フォーカスやハイライトの状況を保持します。*/
	ENABLE ( flags : UXSliderCoState );
}
// }}}
// {{{ class UXSliderState extends UXBasicState
/**
 * UXSliderState クラス<br>
 * UXSliderの現在の状態を表すオブジェクトです。
 */
class UXSliderState extends UXBasicState
{
	// {{{ public var resource( default, default ) : UXSliderResource;
	/**
	 * スライダーの描画に使用するリソースです。
	 */
	public var resource( default, default ) : UXSliderResource;
	// }}}
	// {{{ public var trac(default, default) : UXScalable
	/**
	 * スライダートラック(背景)です。
	 */
	public var trac(default, default) : UXScalable;
	// }}}
	// {{{ public var thumb(default, default) : UXButton
	/**
	 * スライダーサムです。
	 */
	public var thumb(default, default) : UXButton;
	// }}}
	// {{{ public var direction( default, default ) : UXSliderDirection
	/**
	 * スライダが水平方向か、鉛直方向かを設定します。
	 */
	public var direction( default, default ) : UXSliderDirection;
	// }}}
	// {{{ public var range( default, default ) : UXRange;
	/**
	 * スライダで設定できる最小値と最大値を設定します。
	 */
	public var range( default, default ) : UXRange;
	// }}}
	// {{{ public var step(default, default) : Float
	/**
	 * 移動の最小単位です。
	 */
	public var step(default, default) : Float;
	// }}}
	// {{{ public var position( default, default ) : Float;
	/**
	 * スライダの現在の値を取得または設定します。
	 */
	public var position( default, default ) : Float;
	// }}}
	// {{{ public var liveDragging( default, default ) : Bool;
	/**
	 * ユーザーがスライダサムをドラッグしている間、SliderChangeInteractionが
	 * 継続的にスライダーが変化したイベントを送出するかどうかを示すブール値を取得または設定します。
	 */
	public var liveDragging( default, default ) : Bool;
	// }}}
	// {{{ public var act(default, null) : UXSliderAct
	/**
	 * デフォルトの動きです。
	 */
	public var acts(default, null) : UXSliderAct;
	// }}}
	// {{{ public var condition( default, default) : UXSliderExclusiveState;
	/**
	 * enableかどうかやフォーカスが当たっているかなど各種状況を保持する変数です。
	 */
	public var condition( default, default) : UXSliderExclusiveState;
	// }}}
	// {{{ public var focusManager(default, default) : UXFocusManager
	/**
	 * このコンポーネントが属するフォーカスグループの管理オブジェクトです。
	 * このコンポーネントがフォーカスを受け取らない場合はnullです。
	 */
	public var focusManager(default, default) : UXFocusManager;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 */
	public function new()
	{
		super();
		// 
		// TODO
		// リソースの設定
		// デフォルト値の設定
	}
	// }}}
	// {{{ private function attachResource() : Void
	/**
	 * ボタンに対するグローバルなリソースをresourceプロパティに取得する関数です。
	 */
	private function attachResource() : Void
	{
	}
	// }}}
}
// }}}
// {{{ enum UXSliderDirection
enum UXSliderDirection
{
	/** 水平方向を表すバリアントです。 */
	HORIZONTAL;
	/** 鉛直方向を表すバリアントです。 */
	VERTICAL;
}
// }}}
// {{{ class UXSlider extends UXComponent
/**
 * UXSliderクラス<br>
 * ユーザが指定された区間内でノブをスライドすることによりグラフィカルに値を選択できるようにするコンポーネントです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXSlider extends UXComponent
{
	// {{{ properties

	private var _state : UXSliderState;

	// }}}
	// {{{ public var ctrl : UXController<UXSliderState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXSliderState>;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。引数で指定した方向のスライダーを作ります。デフォルト値はHORIZONTALです。
	 */
	public function new( ?dir : UXSliderDirection )
	{
		super();
		if (dir == null) dir = UXSliderDirection.HORIZONTAL;
	}
	// }}}
	// {{{ public function refreshResource() : Void
	/**
	 * ボタンに対するグローバルなリソースを再取得する関数です。
	 */
	public function refreshResource() : Void
	{
	}
	// }}}
	// {{{ public function update( updator : UXSliderState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXSliderState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
// {{{ class UXSliderInitInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderInitInteraction クラス<br>
 * スライダーの初期化デフォルトインタラクションです。
 */
class UXSliderInitInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
// {{{ class UXSliderFocusInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderFocusInteraction クラス<br>
 * ボタンのfocus/unfocusに対するデフォルトインタラクションです。
 */
class UXSliderFocusInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
// {{{ class UXSliderSlideInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderSlideInteraction クラス<br>
 * スライダーの動きに対応するデフォルトインタラクションです。
 */
class UXSliderSlideInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
// {{{ class UXSliderResizeInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderResizeInteraction クラス<br>
 * ボタンの大きさを変更するデフォルトインタラクションです。
 */
class UXSliderResizeInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
// {{{ class UXSliderEnableInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderEnableInteraction クラス<br>
 * 有効/無効を切り替えるデフォルトインタラクションです。
 */
class UXSliderEnableInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
// {{{ class UXSliderModelInteraction extends UXInteraction<UXSliderState>
/**
 * UXSliderModelInteraction クラス<br>
 * スクロールのモデル変更に対するデフォルトインタラクションです。
 */
class UXSliderModelInteraction extends UXInteraction<UXSliderState>
{
}
// }}}
